﻿var map;
var layerMontevideo, layerLineas;
var pathApplication;
var markerOrigen;
var markerDestino;
var iconOrigen;
var iconDestino;
var iconOmnibus;
var mostrarLineas;
var radioButton;
var radioButtonId;
var posicionesLinea;
var http_request = false;

function init(pathApp) {
    pathApplication = pathApp;
    map = new OpenLayers.Map('map', {
        maxExtent: new OpenLayers.Bounds(443969.812500, 6135267.500000, 478959.875000, 6160411.000000),
        maxResolution: 'auto',
        projection: "EPSG:2163",
        units: "m"
    });
    layerMontevideo = new OpenLayers.Layer.WMS("Montevideo", "http://127.0.0.1:8080/cgi-bin/mapserv.exe", { map: pathApp + '\\mapFile.map', layers: 'montevideo' });
    // Filtro por una linea que no existe asi no muestra nada, pero agrega la capa
    layerLineas = new OpenLayers.Layer.WMS("Lineas de Omnibus", "http://localhost:8080/cgi-bin/mapserv.exe", { map: pathApp + '\\mapFile.map', layers: 'lineas', transparent: 'true', 'ID': ['300'] });

    map.addLayers([layerMontevideo, layerLineas]);
    
    map.addControl(new OpenLayers.Control.LayerSwitcher());

    map.zoomToMaxExtent();

    map.addControl(new OpenLayers.Control.MousePosition());
    markerOrigen = new OpenLayers.Layer.Markers("Origen");
    markerDestino = new OpenLayers.Layer.Markers("Destino");

    var size = new OpenLayers.Size(10, 17);
    var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);

    iconOrigen = new OpenLayers.Icon('http://localhost//Pgmobile//Scripts//img//marker-green.png', size, offset);
    iconDestino = new OpenLayers.Icon('http://localhost//Pgmobile//Scripts//img//marker.png', size, offset);
    iconOmnibus = new OpenLayers.Icon('http://localhost//Pgmobile//Scripts//img//marker.png', size, offset);
    map.addLayer(markerOrigen);
    map.addLayer(markerDestino);
}

function mostrarRecorrido() {
    map.zoomToMaxExtent();
    mostrarLineas = true;
    radioButton = false;
    var gid = document.getElementById('comboMostrarRecorrido');
    layerLineas.mergeNewParams({ 'ID': [gid.value] });
    makePOSTRequest(true,-1);
}

function mostrarRecorridoSeleccionado(gid, idChecked) {
    mostrarLineas = true;
    map.zoomToMaxExtent();
    var Omnibus1Txt = document.getElementById('Omnibus1Txt');
    var Omnibus2Txt = document.getElementById('Omnibus2Txt');
    var Omnibus3Txt = document.getElementById('Omnibus3Txt');
    var OmnibusChecked = document.getElementById(idChecked);
    Omnibus1Txt.checked = false;
    Omnibus2Txt.checked = false;
    Omnibus3Txt.checked = false;
    OmnibusChecked.checked = true;
    layerLineas.mergeNewParams({ 'ID': [gid] });
    radioButton = true;
    radioButtonId = gid;
    makePOSTRequest(false,gid);
}

function copiarCalleSeleccionada(nombreCalle, tipo, cantCalles, idChecked) {
    if (tipo == 'calle') {
        for (var i = 1; i <= cantCalles; i++) {
            document.getElementById('PosibleCalle' + i + 'Txt').checked = false;
        }
        document.getElementById('nmCalle').value = nombreCalle;
    } else {
        for (var i = 1; i <= cantCalles; i++) {
            document.getElementById('PosibleEsquina' + i + 'Txt').checked = false;
        }
        document.getElementById('nmEsquina').value = nombreCalle;
    }
    var calleChecked = document.getElementById(idChecked);
    calleChecked.checked = true;
}

function marcarPunto(respuesta) {
    mostrarLineas = false;
    if (respuesta.encontre == true) {
        if (respuesta.tipo == 'origen') {
            var xOrigen = document.getElementById('xOrigen');
            var yOrigen = document.getElementById('yOrigen');
            xOrigen.value = respuesta.x;
            yOrigen.value = respuesta.y;
            markerOrigen.clearMarkers();
            var punto = new OpenLayers.LonLat(respuesta.x, respuesta.y);
            map.setCenter(punto, 5);
            markerOrigen.addMarker(new OpenLayers.Marker(punto, iconOrigen));
        } else {
            var xDestino = document.getElementById('xDestino');
            var yDestino = document.getElementById('yDestino');
            xDestino.value = respuesta.x;
            yDestino.value = respuesta.y;
            markerDestino.clearMarkers();
            var punto = new OpenLayers.LonLat(respuesta.x, respuesta.y);
            map.setCenter(punto, 5);
            markerDestino.addMarker(new OpenLayers.Marker(punto, iconDestino));
        }
    } else {
        alert('No existe interseccion')
    }
}

function mostrarLineasRecorrido(context) {
    mostrarLineas = true;
    radioButton = false;
    makePOSTRequest(true,-1);
}


function makePOSTRequest(combo,idLinea) {
    http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/html');
        }
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) { }
        }
    }
    if (!http_request) {
        alert('Hubo un problema procesando la informacion para mostrar los moviles de la linea.');
        return false;
    }
    var gid;
    var url;
    if (combo == true) {
        gid = document.getElementById('comboMostrarRecorrido').value;
    } else {
        gid = idLinea;
    }
    url = '/Pgmobile/Mapa/ObtenerPuntosLinea?linea=' + gid;
    http_request.onreadystatechange = mostrarLineasRespuesta;
    http_request.open('GET', url, true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Connection", "close");
    http_request.send(null);
}

function mostrarLineasRespuesta() {
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            result = http_request.responseText;
            if (posicionesLinea != null) {
                posicionesLinea.destroy();
            }
            posicionesLinea = new OpenLayers.Layer.Text("Posiciones Moviles", { location: "http://localhost/Pgmobile/posicionesLinea1.txt" });
            map.addLayer(posicionesLinea);
            if (mostrarLineas == true && radioButton == false) {
                setTimeout('makePOSTRequest(false,-1)', 15000);
            } else if (mostrarLineas == true && radioButton == true) {
                setTimeout('makePOSTRequest(true,'+radioButtonId+')', 15000);
            } else {
                if (posicionesLinea != null) {
                    posicionesLinea.destroy();
                }
            }
        } else {
            alert('Hubo un problema procesando la informacion para mostrar los moviles de la linea.');
        }
    }
}


function mostrarOmnibus(respuesta) {
    eliminarRadioButtons('tablaOmnibusEncontrados');
    var divRecorridosEncontrados = document.getElementById('divRecorridosEncontrados');
    if (respuesta.encontre == true) {
        if (respuesta.cantOmnibus == 3) {
            agregarElementoMostrarRecorridos('Omnibus1Txt', respuesta.cdOmnibus1, respuesta.nmOmnibus1);
            agregarElementoMostrarRecorridos('Omnibus2Txt', respuesta.cdOmnibus2, respuesta.nmOmnibus2);
            agregarElementoMostrarRecorridos('Omnibus3Txt', respuesta.cdOmnibus3, respuesta.nmOmnibus3);
        } else if (respuesta.cantOmnibus == 2) {
            agregarElementoMostrarRecorridos('Omnibus1Txt', respuesta.cdOmnibus1, respuesta.nmOmnibus1);
            agregarElementoMostrarRecorridos('Omnibus2Txt', respuesta.cdOmnibus2, respuesta.nmOmnibus2);
        } else {
            agregarElementoMostrarRecorridos('Omnibus1Txt', respuesta.cdOmnibus1, respuesta.nmOmnibus1);
        }
        divRecorridosEncontrados.style.display = '';
    } else {
        divRecorridosEncontrados.style.display = 'none';
        alert('No existen omnibus que lo dejen viene, tome un taxi :P')
    }
}

function mostrarPosiblesCalles(respuesta) {
    var divPosiblesCalles = document.getElementById('divPosiblesCalles');
    eliminarRadioButtons('tablaPosiblesCalles');
    if (respuesta.posiblesCalles == true) {
        if (respuesta.cantCalles == 5) {
            agregarElementoCallesPosibles('PosibleCalle1Txt', respuesta.nmCallePosible1, respuesta.cantCalles, 'calle');
            agregarElementoCallesPosibles('PosibleCalle2Txt', respuesta.nmCallePosible2, respuesta.cantCalles, 'calle');
            agregarElementoCallesPosibles('PosibleCalle3Txt', respuesta.nmCallePosible3, respuesta.cantCalles, 'calle');
            agregarElementoCallesPosibles('PosibleCalle4Txt', respuesta.nmCallePosible4, respuesta.cantCalles, 'calle');
            agregarElementoCallesPosibles('PosibleCalle5Txt', respuesta.nmCallePosible5, respuesta.cantCalles, 'calle');
        } else if (respuesta.cantCalles == 4) {
            agregarElementoCallesPosibles('PosibleCalle1Txt', respuesta.nmCallePosible1, respuesta.cantCalles, 'calle');
            agregarElementoCallesPosibles('PosibleCalle2Txt', respuesta.nmCallePosible2, respuesta.cantCalles, 'calle');
            agregarElementoCallesPosibles('PosibleCalle3Txt', respuesta.nmCallePosible3, respuesta.cantCalles, 'calle');
            agregarElementoCallesPosibles('PosibleCalle4Txt', respuesta.nmCallePosible4, respuesta.cantCalles, 'calle');
        } else if (respuesta.cantCalles == 3) {
            agregarElementoCallesPosibles('PosibleCalle1Txt', respuesta.nmCallePosible1, respuesta.cantCalles, 'calle');
            agregarElementoCallesPosibles('PosibleCalle2Txt', respuesta.nmCallePosible2, respuesta.cantCalles, 'calle');
            agregarElementoCallesPosibles('PosibleCalle3Txt', respuesta.nmCallePosible3, respuesta.cantCalles, 'calle');
        } else if (respuesta.cantCalles == 2) {
            agregarElementoCallesPosibles('PosibleCalle1Txt', respuesta.nmCallePosible1, respuesta.cantCalles, 'calle');
            agregarElementoCallesPosibles('PosibleCalle2Txt', respuesta.nmCallePosible2, respuesta.cantCalles, 'calle');
        } else {
            agregarElementoCallesPosibles('PosibleCalle1Txt', respuesta.nmCallePosible1, respuesta.cantCalles, 'calle');
        }
        divPosiblesCalles.style.display = '';
    } else if (respuesta.posiblesEsquinas == true) {
        if (respuesta.cantCalles == 5) {
            agregarElementoCallesPosibles('PosibleCalle1Txt', respuesta.nmEsquinaPosible1, respuesta.cantCalles, 'esquina');
            agregarElementoCallesPosibles('PosibleCalle2Txt', respuesta.nmEsquinaPosible2, respuesta.cantCalles, 'esquina');
            agregarElementoCallesPosibles('PosibleCalle3Txt', respuesta.nmEsquinaPosible3, respuesta.cantCalles, 'esquina');
            agregarElementoCallesPosibles('PosibleCalle4Txt', respuesta.nmEsquinaPosible4, respuesta.cantCalles, 'esquina');
            agregarElementoCallesPosibles('PosibleCalle5Txt', respuesta.nmEsquinaPosible5, respuesta.cantCalles, 'esquina');
        } else if (respuesta.cantCalles == 4) {
            agregarElementoCallesPosibles('PosibleCalle1Txt', respuesta.nmEsquinaPosible1, respuesta.cantCalles, 'esquina');
            agregarElementoCallesPosibles('PosibleCalle2Txt', respuesta.nmEsquinaPosible2, respuesta.cantCalles, 'esquina');
            agregarElementoCallesPosibles('PosibleCalle3Txt', respuesta.nmEsquinaPosible3, respuesta.cantCalles, 'esquina');
            agregarElementoCallesPosibles('PosibleCalle4Txt', respuesta.nmEsquinaPosible4, respuesta.cantCalles, 'esquina');
        } else if (respuesta.cantCalles == 3) {
            agregarElementoCallesPosibles('PosibleCalle1Txt', respuesta.nmEsquinaPosible1, respuesta.cantCalles, 'esquina');
            agregarElementoCallesPosibles('PosibleCalle2Txt', respuesta.nmEsquinaPosible2, respuesta.cantCalles, 'esquina');
            agregarElementoCallesPosibles('PosibleCalle3Txt', respuesta.nmEsquinaPosible3, respuesta.cantCalles, 'esquina');
        } else if (respuesta.cantCalles == 2) {
            agregarElementoCallesPosibles('PosibleCalle1Txt', respuesta.nmEsquinaPosible1, respuesta.cantCalles, 'esquina');
            agregarElementoCallesPosibles('PosibleCalle2Txt', respuesta.nmEsquinaPosible2, respuesta.cantCalles, 'esquina');
        } else {
            agregarElementoCallesPosibles('PosibleCalle1Txt', respuesta.nmEsquinaPosible1, respuesta.cantCalles, 'esquina');
        }
        divPosiblesCalles.style.display = '';
    }
}

function procesarRespuesta(context) {
    var respuesta = eval("(" + context.get_data() + ")");
    eliminarRadioButtons('tablaPosiblesCalles');
    eliminarRadioButtons('tablaOmnibusEncontrados');
    var divPosiblesCalles = document.getElementById('divPosiblesCalles');
    if (divPosiblesCalles != null) {
        divPosiblesCalles.style.display = 'none';
    }
    if (respuesta.tipoRequest == 'mostrarPunto') {
        marcarPunto(respuesta);
    } else if (respuesta.tipoRequest == 'mostrarPosiblesCalles') {
        mostrarPosiblesCalles(respuesta);
    } else {
        mostrarOmnibus(respuesta);
    }
}


function eliminarRadioButtons(nmTabla) {
    var element = document.getElementById(nmTabla);
    while (element.firstChild) {
        element.removeChild(element.firstChild);
    }
}

function agregarElementoMostrarRecorridos(id, valor, texto) {
    var table = document.getElementById('tablaOmnibusEncontrados');
    var tr = document.createElement('tr');
    var td = document.createElement('td');
    var td1 = document.createElement('td');
    var radioButton = document.createElement('input');
    radioButton.type = 'radio';
    radioButton.id = id;
    radioButton.name = id;
    radioButton.value = valor;
    radioButton.setAttribute("onclick", 'mostrarRecorridoSeleccionado(' + valor + ',\'' + id + '\');');
    var label = document.createElement('label');
    label.id = id + 'Txt';
    label.innerHTML = texto;
    td.appendChild(radioButton);
    td1.appendChild(label);
    tr.appendChild(td);
    tr.appendChild(td1);
    table.appendChild(tr);
}

function agregarElementoCallesPosibles(id, valor, cantCalles, tipo) {
    var table = document.getElementById('tablaPosiblesCalles');
    var tr = document.createElement('tr');
    var td = document.createElement('td');
    var td1 = document.createElement('td');
    var radioButton = document.createElement('input');
    radioButton.type = 'radio';
    radioButton.id = id;
    radioButton.name = id;
    radioButton.value = valor;
    radioButton.setAttribute("onclick", 'copiarCalleSeleccionada(\'' + valor + '\',\'' + tipo + '\' ,' + cantCalles + ' ,\'' + id + '\');')
    var label = document.createElement('label');
    label.id = id + 'Txt';
    label.innerHTML = valor;
    td.appendChild(radioButton);
    td1.appendChild(label);
    tr.appendChild(td);
    tr.appendChild(td1);
    table.appendChild(tr);
}

function setTipo(tipo) {
    var hdnTipo = document.getElementById('tipo');
    hdnTipo.value = tipo;
}

function mostrarDiv() {
    var metodoBusqueda = document.getElementById('metodoBusqueda');
    var divDireccionCalle = document.getElementById('divDireccionCalle');
    var divDireccionPuerta = document.getElementById('divDireccionPuerta');
    var divRecorridos = document.getElementById('divRecorridos');
    var divRecorridosEncontrados = document.getElementById('divRecorridosEncontrados');
    var divPosiblesCalles = document.getElementById('divPosiblesCalles');
    divRecorridosEncontrados.style.display = 'none';
    divPosiblesCalles.style.display = 'none';
    if (metodoBusqueda.value == divDireccionCalle.id) {
        divDireccionCalle.style.display = '';
        divRecorridos.style.display = 'none';
        divDireccionPuerta.style.display = 'none';
        var nmCallePuerta = document.getElementById('nmCallePuerta');
        var numPuerta = document.getElementById('numPuerta');
        nmCallePuerta.value = '';
        numPuerta.value = '';
    } else if (metodoBusqueda.value == divRecorridos.id) {
        divRecorridos.style.display = '';
        divDireccionPuerta.style.display = 'none';
        divDireccionCalle.style.display = 'none';
    } else {
        divDireccionPuerta.style.display = '';
        divRecorridos.style.display = 'none';
        divDireccionCalle.style.display = 'none';
        var nmCalle = document.getElementById('nmCalle');
        var nmEsquina = document.getElementById('nmEsquina');
        nmCalle.value = '';
        nmEsquina.value = '';
    }
}
